<?php

if (!defined('BASE_PATH'))
	exit('Restricted access');

/**
 * 视图类
 * @author sandy
 * @package sFramework
 *
 */
class View {

	/**
	 * 当前视图层被赋值的所有变量集合
	 * 
	 * @var array
	 */
	public $_vars;

	/**
	 * 模板文件所在文件夹名,初始化视图类时被赋值
	 * 
	 * @var string
	 */
	public $template_dir;

	/**
	 * 当前视图层最终输出到终端的字符
	 * 
	 * @var string
	 */
	private $output;

	/**
	 * 赋值一个变量到视图
	 * 
	 * @param mixed $name
	 * @param mixed $val
	 */
	public function assign($tpl_var, $value = null) {
		if (is_array($tpl_var)) {
			foreach ($tpl_var as $key => $val) {
				if ($key != '') {
					$this->_vars[$key] = $val;
				}
			}
		} else {
			if ($tpl_var != '')
				$this->_vars[$tpl_var] = $value;
		}
	}

	/**
	 * 显示一个视图
	 * @param string $tpl 模板文件名
	 */
	public function display($tpl) {
		if (empty($this->output)) {
			$this->fetch($tpl);
		}

		echo $this->output;
	}

	/**
	 * 获取一个视图模板得到视图最终输出字符串
	 * 
	 * @param string $tpl 模板文件名
	 */
	public function fetch($tpl) {
		$viewFile = $this->template_dir . DS . $tpl;

		if (!file_exists($viewFile)) {
			show_error(array('The template file "' . $tpl . '" dose not exist', 'path:' . $viewFile));
		}

		$currentPWD = getcwd();

		/* 切换到视图文件所在的目录，以保证视图文件中的包含路径有效。 */
		chdir(dirname($viewFile));

		extract((array) $this->_vars);
		ob_start();
		include $viewFile;
		$this->output .= ob_get_contents();
		ob_end_clean();

		/* 最后还要切换到原来的目录。 */
		chdir($currentPWD);
	}

}